package opf5.startup;


import opf5.casosDeUso.Login;
import opf5.entities.propuestas.RepositorioPropuestasEnMemoria;
import opf5.entities.repositorios.OPF5FactoryPersistente;
import opf5.entities.repositorios.RepositorioJugadores;
import opf5.entities.repositorios.RepositorioJugadoresPersistente;
import opf5.entities.repositorios.RepositorioPartidos;
import opf5.entities.repositorios.RepositorioPartidosPersistente;
import opf5.entities.repositorios.RepositorioPropuestas;
import opf5.entities.repositorios.RepositorioPropuestasPersistente;
import opf5.ui.VistaAdministrarPartidos;
import opf5.ui.VistaAdministrarPropuestas;
import opf5.ui.VistaBajaPartidos;
import opf5.ui.VistaBusquedaJugadores;
import opf5.ui.VistaCalificarJugador;
import opf5.ui.VistaCrearPartido;
import opf5.ui.VistaDatosJugador;
import opf5.ui.VistaHandicap;
import opf5.ui.VistaInscripcionPartido;
import opf5.ui.VistaMenuPrincipal;
import opf5.ui.VistaMisInfracciones;
import opf5.ui.VistaProponerJugador;

public class OPF5ApplicationPersistente {
	private RepositorioPartidos repositorioPartidos;
	private VistaMenuPrincipal vistaPrincipal;
	private RepositorioJugadores repositorioJugadores;
	private RepositorioPropuestas repositorioPropuestas;
	
	public static void main(String args[]) {
		OPF5FactoryPersistente.setInstance();
		
		OPF5ApplicationPersistente aplicacion = new OPF5ApplicationPersistente();
		aplicacion.start();
	}

	private void start() {
		
		this.inicializar();
		
		vistaPrincipal.initialize();

	}

	private void inicializar() {
		repositorioPartidos = new RepositorioPartidosPersistente();
		repositorioJugadores = new RepositorioJugadoresPersistente();
		repositorioPropuestas = new RepositorioPropuestasPersistente();
		
		VistaInscripcionPartido inscripcionPartido = new VistaInscripcionPartido(repositorioPartidos);
		VistaBajaPartidos bajaPartido = new VistaBajaPartidos(repositorioPartidos, repositorioJugadores);
		
		VistaProponerJugador proponerJugador = new VistaProponerJugador(repositorioPropuestas);
		
		VistaMisInfracciones misInfracciones = new VistaMisInfracciones();
		
		VistaAdministrarPropuestas administrarPropuestas = new VistaAdministrarPropuestas(repositorioPropuestas,
				repositorioJugadores);
		
		VistaCrearPartido crearPartido = new VistaCrearPartido(repositorioPartidos);
		
		VistaAdministrarPartidos administrarPartidos = new VistaAdministrarPartidos(repositorioPartidos);
		
		VistaCalificarJugador calificarJugador = new VistaCalificarJugador(repositorioPartidos);
		
		VistaDatosJugador.getInstance().setRepositorioPartidos(repositorioPartidos);
		
		VistaHandicap handicaps = new VistaHandicap(repositorioJugadores);
		
		VistaBusquedaJugadores busquedaJugadores = new VistaBusquedaJugadores(repositorioJugadores);

		
		Login loginController = new Login(repositorioJugadores);
		loginController.agregarObserver(inscripcionPartido);
		loginController.agregarObserver(proponerJugador);
		loginController.agregarObserver(misInfracciones);
		loginController.agregarObserver(administrarPropuestas);
		loginController.agregarObserver(crearPartido);
		loginController.agregarObserver(calificarJugador);
		loginController.agregarObserver(bajaPartido);

			
		vistaPrincipal = new VistaMenuPrincipal(
				loginController,
				inscripcionPartido,
				bajaPartido,
				proponerJugador,
				misInfracciones,
				administrarPropuestas,
				crearPartido,
				administrarPartidos,
				calificarJugador,
				handicaps,
				busquedaJugadores);
		
	}
}
